﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Funciones;

namespace GestionVentaInvetario2._0
{
    public partial class Todo_a_390_490_y_mas : Form
    {
        //Metodos y Variables de Apollo

        int cont;
        int total;
        int stotal;

        public Todo_a_390_490_y_mas()
        {
            InitializeComponent();
            Operaciones op = new Operaciones();
            dgvInventario.DataSource = op.todosLosProducto();
            cont = 0;
            total = 0;
            cbTipoReporte.Items.Add("Venta");
            cbTipoReporte.Items.Add("Producto");
            stiockMinimo();
        }

        public string isnull(string cadena)
        {
            if (cadena == "")
                cadena = "0";
            return cadena;
        }

        //Validar Usuario
        public void nombreusuario(string ususari, string privilegio, string codigoUser)
        {
            try
            {
                txtUsuarioInventario.Text = ususari;
                txtUsuarioVenta.Text = ususari;
                txtUsuarioReporte.Text = ususari;
                txtCodigoUsuarioDentro.Text = codigoUser;
                if (privilegio != "admin")
                {
                    txtCodigoBarraInventario.Enabled = false;
                    txtNombreProductoInventario.Enabled = false;
                    txtPrecioInventario.Enabled = false;
                    txtCantidadInventario.Enabled = false;
                    txtMinimoInventario.Enabled = false;
                    btnAgregarProducto.Enabled = false;
                    btnBorrarProducto.Enabled = false;
                    btnEditarProducto.Enabled = false;
                    txtBusquedaInventario.Enabled = false;
                    cbTipoReporte.Enabled = false;
                    cbRangoReporte.Enabled = false;
                    btnReporte.Enabled = false;

                }
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }

        }

        //Cargar Detalle de Compra
        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                Operaciones op = new Operaciones();
                string producto = txtCodigoBarra.Text;
                string cantidad = txtCantidad.Text;

                string nombre = op.nombreproducto(producto);
                string precio = op.precio(producto);
                string id = op.id(producto);

                string preciosb;
                string canitdadsb;

                if (producto != "" && producto != "0" && cantidad != "" && cantidad != "0")
                {
                    dgvDetalleVenta.Rows.Add();
                    dgvDetalleVenta.Rows[cont].Cells[0].Value = id;
                    dgvDetalleVenta.Rows[cont].Cells[1].Value = nombre;
                    dgvDetalleVenta.Rows[cont].Cells[2].Value = precio;
                    dgvDetalleVenta.Rows[cont].Cells[3].Value = cantidad;
                }
                else
                {
                    MessageBox.Show("Producto Invalido");
                }

                preciosb = dgvDetalleVenta.Rows[cont].Cells[2].Value.ToString();
                canitdadsb = dgvDetalleVenta.Rows[cont].Cells[3].Value.ToString();
                //calcular total
                dgvDetalleVenta.Rows[cont].Cells[4].Value = Convert.ToString(int.Parse(preciosb) * int.Parse(canitdadsb));
                stotal = int.Parse(dgvDetalleVenta.Rows[cont].Cells[4].Value.ToString());
                total += stotal;
                txtTotal.Text = Convert.ToString(total);
                cont++;
            }
            catch (Exception)
            {

                MessageBox.Show("Error");
            }

        }

        //Agregar Producto al Inventario
        private void btnAgregarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                Operaciones op = new Operaciones();
                string codigobarra = isnull(txtCodigoBarraInventario.Text);
                string nombre = isnull(txtNombreProductoInventario.Text);
                int precio = int.Parse(isnull(txtPrecioInventario.Text));
                int cantidad = int.Parse(isnull(txtCantidadInventario.Text));
                int minimo = int.Parse(isnull(txtMinimoInventario.Text));

                DialogResult dr;
                dr = MessageBox.Show("Esta seguro que desea guardar el producto", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                switch (dr)
                {
                    case DialogResult.Yes:
                        {
                            if (codigobarra != "0" && nombre != "0" && precio != 0 && cantidad != 0)
                            {
                                int error = op.agregarProducto(nombre, codigobarra, precio, cantidad, minimo);
                                if (error != 0)
                                {
                                    MessageBox.Show("El Producto se Agregó correctamente", "Respuesta de Operación");
                                    dgvInventario.DataSource = op.todosLosProducto();
                                    txtCodigoBarraInventario.Text = null;
                                    txtNombreProductoInventario.Text = null;
                                    txtCantidadInventario.Text = null;
                                    txtPrecioInventario.Text = null;
                                    txtMinimoInventario.Text = null;
                                    break;
                                }
                                else
                                {
                                    MessageBox.Show("Error al Agregar Producto", "Respuesta de Operación");
                                    break;
                                }
                            }
                            else
                            {
                                MessageBox.Show("Complete Los Campos Basios");
                                break;
                            }
                        }
                    case DialogResult.No:
                        {
                            break;
                        }
                }
            }
            catch (Exception)
            {

                MessageBox.Show("Error");
            }
        }

        //Quitar Producto del Detalle de Venta
        private void dgvDetalleVenta_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.ColumnIndex == 5)
                {
                    DialogResult dr;
                    dr = MessageBox.Show("Esta seguro que desea ELIMINAR los datos", "Ventana de Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    switch (dr)
                    {
                        case DialogResult.Yes:
                            {
                                cont--;
                                dgvDetalleVenta.Rows.RemoveAt(e.RowIndex);
                                string precio = dgvDetalleVenta.Rows[e.RowIndex].Cells[2].Value.ToString();
                                string cantidad = dgvDetalleVenta.Rows[e.RowIndex].Cells[3].Value.ToString();
                                stotal = int.Parse(dgvDetalleVenta.Rows[e.RowIndex].Cells[4].Value.ToString());
                                total += -stotal;
                                txtTotal.Text = Convert.ToString(total);
                                MessageBox.Show("Los datos de ELIMINARON correctamente", "Respuesta de Operación");
                                break;
                            }
                        case DialogResult.No:
                            {
                                break;
                            }
                    }
                }
            }
            catch (Exception)
            {

                MessageBox.Show("Error");
            }
        }

        //Cargar Textbox con los datos de la grilla del inventario
        public void dgvInventario_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                txtCodigoBarraInventario.Text = dgvInventario.Rows[e.RowIndex].Cells[1].Value.ToString();
                txtNombreProductoInventario.Text = dgvInventario.Rows[e.RowIndex].Cells[2].Value.ToString();
                txtCantidadInventario.Text = dgvInventario.Rows[e.RowIndex].Cells[4].Value.ToString();
                txtMinimoInventario.Text = dgvInventario.Rows[e.RowIndex].Cells[5].Value.ToString();
                txtPrecioInventario.Text = dgvInventario.Rows[e.RowIndex].Cells[3].Value.ToString();
                txtCodigoOculto.Text = dgvInventario.Rows[e.RowIndex].Cells[0].Value.ToString();
            }
            catch (Exception)
            {

                MessageBox.Show("Error");
            }

        }

        //Buscar Producto por nombre
        private void txtBusquedaInventario_TextChanged(object sender, EventArgs e)
        {
            try
            {
                Operaciones op = new Operaciones();
                dgvInventario.DataSource = op.buscarProducto(isnull(txtBusquedaInventario.Text));
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }
        }

        //Cambiar estado al producto en la base de datos
        private void btnBorrarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                DialogResult dr;
                dr = MessageBox.Show("Esta seguro que desea ELIMINAR los Producto", "Ventana de Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                switch (dr)
                {
                    case DialogResult.Yes:
                        {
                            Operaciones op = new Operaciones();
                            if (op.borrarProducto(int.Parse(isnull(txtCodigoOculto.Text))) > 0)
                            {
                                MessageBox.Show("El Producto se ha ELIMINADO Correctamente");
                                dgvInventario.DataSource = op.todosLosProducto();
                            }
                            else
                            {
                                MessageBox.Show("Error al ELIMINAR el producto");
                            }
                            break;
                        }
                    case DialogResult.No:
                        {
                            break;
                        }
                }
            }
            catch (Exception)
            {

                MessageBox.Show("Error");
            }
        }

        //Editar datos del producto
        private void btnEditarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                DialogResult dr;
                dr = MessageBox.Show("Esta seguro que desea ACTUALIZAR los Datos", "Ventana de Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                switch (dr)
                {
                    case DialogResult.Yes:
                        {
                            int codigo = int.Parse(isnull(txtCodigoOculto.Text));
                            string codgobarra = isnull(txtCodigoBarraInventario.Text);
                            string nombre = isnull(txtNombreProductoInventario.Text);
                            int precio = int.Parse(isnull(txtPrecioInventario.Text));
                            int cantidad = int.Parse(isnull(txtCantidadInventario.Text));
                            int minimo = int.Parse(isnull(txtMinimoInventario.Text));
                            Operaciones op = new Operaciones();
                            if (op.updateProducto(codigo, codgobarra, nombre, precio, cantidad, minimo) > 0)
                            {
                                MessageBox.Show("Actualizacion Correcta");
                                dgvInventario.DataSource = op.todosLosProducto();
                            }
                            else
                            {
                                MessageBox.Show("Error al Actualizar");
                            }
                            break;
                        }
                    case DialogResult.No:
                        {
                            break;
                        }
                }
            }
            catch (Exception)
            {

                MessageBox.Show("Error");
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                BuscarProducto bp = new BuscarProducto();
                bp.ShowDialog();
                txtCodigoBarra.Text = bp.codigo;
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }
        }

        //Buscar nombre producto con el codigo de barra
        private void txtCodigoBarra_TextChanged(object sender, EventArgs e)
        {
            try
            {
                Operaciones op = new Operaciones();
                string producto = txtCodigoBarra.Text;
                txtnombreMuestra.Text = op.nombreproducto(producto);
                idProducto.Text = op.id(producto);
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }
        }

        //Limpiar los datos
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                txtCodigoBarra.Text = null;
                txtnombreMuestra.Text = null;
                txtCantidad.Text = "1";
                dgvDetalleVenta.Rows.Clear();
                total = 0;
                txtTotal.Text = Convert.ToString(total);
                cont = 0;
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }
        }

        //Vender Prodcuto o Productos
        private void btnVenderVenta_Click(object sender, EventArgs e)
        {
            stiockMinimo();
            try
            {
                if (txtCodigoUsuarioDentro.Text != "" && txtTotal.Text != "" && txtBoleta.Text != "" && txtCodigoUsuarioDentro.Text != null && txtTotal.Text != null && txtBoleta.Text != null)
                {
                    Operaciones op = new Operaciones();
                    int usuario = int.Parse(txtCodigoUsuarioDentro.Text);
                    DateTime fecha = fechaVenta.Value;
                    int total = int.Parse(txtTotal.Text);
                    int boleta = int.Parse(txtBoleta.Text);
                    int error = 0;

                    if ((error = op.insertVenta(fecha, total, boleta, usuario, dgvDetalleVenta)) > 0)
                    {
                        try
                        {
                            DialogResult dr;
                            dr = MessageBox.Show("Calcular Buelto", "Caja", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                            switch (dr)
                            {
                                case DialogResult.Yes:
                                    {
                                        Caja c = new Caja();
                                        c.traertotal(int.Parse(txtTotal.Text));
                                        c.ShowDialog();
                                        break;
                                    }
                                case DialogResult.No:
                                    {
                                        break;
                                    }
                            }
                        }
                        catch (Exception)
                        {

                            MessageBox.Show("Error");
                        }

                        txtCodigoBarra.Text = null;
                        txtnombreMuestra.Text = null;
                        txtCantidad.Text = "1";
                        dgvDetalleVenta.Rows.Clear();
                        total = 0;
                        txtTotal.Text = Convert.ToString(total);
                        cont = 0;

                        MessageBox.Show("Venta Exitosa");
                    }
                    else
                    {
                        MessageBox.Show("Error de Venta");
                    }
                }
                else 
                {
                    MessageBox.Show("Faltan Datos");
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Error de Venta");
            }
        }

        private void btnCancelarProducto_Click(object sender, EventArgs e)
        {
            txtCodigoBarraInventario.Text = null;
            txtNombreProductoInventario.Text = null;
            txtCantidadInventario.Text = null;
            txtPrecioInventario.Text = null;
            txtMinimoInventario.Text = null;
        }

        //Popam minimo 
        public void stiockMinimo() 
        {
            Operaciones op = new Operaciones();
            string productos;
            productos = op.TraerValor("select nombreProducto, cantidad from producto where cantidad = minimo and estado = 'activo'");
            productos = op.TraerValor("select nombreProducto, cantidad from producto where cantidad < minimo and estado = 'activo'");
            if (productos == null)
            {
                MessageBox.Show("Los Productos " + productos + " Se Encuentran en Stock Minimo");
            }
        }

        private void cbTipoReporte_TabIndexChanged(object sender, EventArgs e)
        {
            if (cbTipoReporte.Text == "Venta")
            {
                cbRangoReporte.Items.Add("Ultima Semana");
                cbRangoReporte.Items.Add("Ultimo Mes");
            }
            else 
            {
                cbRangoReporte.Items.Add("Producto Mas Vendido");
                cbRangoReporte.Items.Add("Stock");
            }
        }

        private void cbTipoReporte_TextChanged(object sender, EventArgs e)
        {
            if (cbTipoReporte.Text == "Venta")
            {
                cbRangoReporte.Items.Clear();
                cbRangoReporte.Items.Add("Ultima Semana");
                cbRangoReporte.Items.Add("Ultimo Mes");
            }

            else
            {
                cbRangoReporte.Items.Clear();
                cbRangoReporte.Items.Add("Producto Mas Vendido");
                cbRangoReporte.Items.Add("Stock");
            }
        }

        private void btnReporte_Click(object sender, EventArgs e)
        {
            try
            {
                Operaciones op = new Operaciones();
                if (cbTipoReporte.Text == "Producto" && cbRangoReporte.Text == "Stock") 
                {
                    reportViewer1.Enabled = true;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Error al Generar Reporte");
            }
        }

        private void Todo_a_390_490_y_mas_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'DataSetProductos.QueryAllProductos' Puede moverla o quitarla según sea necesario.
            this.QueryAllProductosTableAdapter.Fill(this.DataSetProductos.QueryAllProductos);

        }








    }
}
